package com.day4;

import jdk.nashorn.internal.ir.IfNode;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @program: java_base
 * @className: com.day4.Test1
 * @description: 作业讲解
 * @author: 513 王老师(qq:292817678,tel&微信:18688753763)
 * @create: 2020-09-17 14:14
 **/
public class Test1 {
    public static void main(String[] args) {
        //录入一个2-9位的数字
        int num = getNum();
        System.out.println("录入的数字是：" + num);
        // 录入的是1234  1 + 2 + 3 + 4
        //System.out.println(num % 10); // 4
        //System.out.println((num / 10 )% 10); // 3
        // 将数字才分成单个的数字放在数组
        int [] nums = splitNum(num);
        System.out.println("拆分的数组是：" + Arrays.toString(nums));
        // 求和
        int sum = sum(nums);
        System.out.println("和是：" + sum);

        // 判断和是否是质数
        boolean ispri = isPri(sum);
        System.out.println("和 "+ sum + (ispri ? "是质数" : "不是质数"));
        if (ispri){
            //回文的处理  输入的数字是 12121  [1,2,1,2,1] 1234 > [4,3,2,1]
            huiwen(num,nums);

        } else {
            // 求不同数字的个数  0 1 2  9 数字  【4,3,2,1】
            int diffNum = diffnum(nums);
            System.out.println("不同数字的个数：" + diffNum);

            // 输入图形
            print(diffNum);
        }
    }

    // 打印图形
    public static void print(int diffNum){
        for (int i = 1; i <= diffNum; i ++){
            // 添加一个循环控制每一行的空格数 = 总行数 - 当前的行
            for (int t = 1; t <= diffNum - i; t ++) {
                System.out.print(" ");
            }

            for(int j = 1; j <= 2 * i - 1; j ++){
                // 只是在首尾打印*
                if (j == 1 || j == 2 * i - 1) {
                    System.out.print(diffNum);
                } else {
                    System.out.print(" ");
                }

            }
            System.out.println();
        }
        // 下半部分
        for (int i = diffNum - 1; i >= 1; i --){
            // 添加一个循环控制每一行的空格数 = 总行数 - 当前的行
            for (int t = 1; t <= diffNum - i; t ++) {
                System.out.print(" ");
            }

            for(int j = 1; j <= 2 * i - 1; j ++){
                // 只是在首尾打印*
                if (j == 1 || j == 2 * i - 1) {
                    System.out.print(diffNum);
                } else {
                    System.out.print(" ");
                }

            }
            System.out.println();
        }
    }

    private static int diffnum(int[] nums) {
        int diffNum = 0;
        for (int i = 0; i <= 9; i ++){
            for(int temp : nums){
               if(i == temp){
                   diffNum ++;
                   break;
               }
            }
        }
        return diffNum;
    }

    // mum是 输入的数字  nums 是输入的数字形成的数组  个位数在数组第一个元素上
    private static void huiwen(int num , int[] nums) {
        StringBuffer sb = new StringBuffer();
        for (int temp : nums){ // [4,3,2,1]  4321
            sb.append(temp);
        }
        if(Integer.parseInt(sb.toString()) == num){
            System.out.println(num + " 是一个回文");
        } else {
            System.out.println(num + " 不是一个回文");
        }

    }

    // 判断是否是质数
    private static boolean isPri(int sum) {
        for (int i = 2; i < sum / 2; i ++){
            if(sum % i == 0){
                return false;
            }
        }
        return  true; // 是一个质数
    }

    // 求和
    private static int sum(int[] nums) {
        int sum = 0;
        for (int tmp : nums){
            sum += tmp;
        }
        return sum;
    }


    // 更改
    // // 将录入的数字才分成单个的数字放在数组
    private static int[] splitNum(int num) {
        int [] nums = new int[(num + "").length()];
        int index = 0;//数组的下标
        while (num != 0){
            int temp = num % 10;
            num = num / 10;
            nums[index] = temp;
            index ++;
        }
        return nums;
    }

    // 录入一个2-9位的数字、 处理异常、 出错之后可以继续输入、数据的合理判断
    private static int getNum() {
        do {
            int num = 0;
            try {
                System.out.println("请录入一个2-9位的数字：");
                Scanner input = new Scanner(System.in);
                num = input.nextInt();
                /*if (num >= 10 && num <= 999999999){
                    return num;
                } else {
                    System.out.println("输入的数字不规则  ");
                }*/
                if (num < 10 || num > 999999999){ // 很多异常能够预测到，但是我不想自己处理
                    throw new Exception("数据不符合规范！！！");
                }
                return num;
            } catch (Exception e){
                e.printStackTrace();
                System.out.println("输入的数字不规则  ");
            }
        }while (true);

    }
}
